МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра САПР
Звіт
Про виконання лабораторної роботи №1
З курсу:
«Бази даних»
Тема: ПОСЛІДОВНИЙ МЕТОД ДОСТУПУ ДО ФАЙЛІВ НА ЗОВНІШНІХ ЗАПАМ’ЯТОВУЮЧИХ ПРИСТРОЯХ.
Мета: Розглянути органiзацiю i ведення файлiв послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу.
Текст програми:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define mainSize (sizeof (animalRecord) + 2*9)
char mainPath[256] = "dbase.pdb";
char tempPath[] = "$temp.pdb";
char searchPath[] = "$srch.pdb";
char groupPath[] = "$group.tdb";
char keyTab = 1;
FILE *dbFile = NULL, *tempFile = NULL, *groupFile = NULL;
class animalRecord
{
public:
int ID;
int Age;
char Pet[40+2];
char ownerName[40+2];
char Illness[40+2];
int price;
char notes[40+2];
int isSet;
int errorcode;
int toDo;
void readFile(FILE *CUR = NULL, int toDo = 0);
void writeToFile(FILE *CUR = NULL, int toDo = 0);
void goToKey(FILE *CUR = NULL);
animalRecord();
};
animalRecord::animalRecord()
{
ID = -1;
Age = 0;
strcpy (Pet,"-");
strcpy (Name,"-");
strcpy (Illness,"-");
price = 0;
strcpy (notes,"-");
errorcode = toDo = isSet = 0;
}
void animalRecord::writeToFile(FILE* CUR, int toDo)
{
if (CUR == NULL) return;
double cur = 0;
int i = 0;
cur = ftell(CUR);
for (i=0;i<mainSize;i++)
{
fseek (CUR,cur+i,SEEK_SET);
fprintf(CUR," ");
}
fseek(CUR,cur,SEEK_SET);
if(toDo)
fprintf(CUR,"%c\n%d\n%d\n%s\n%s\n%s\n%d\n%s\n%d\n",keyTab,
this->ID,
this->Age,
this->Pet,
this->Name,
this->Illness,
this->price,
this->notes,
this->toDo);
else
fprintf(CUR,"%c\n%d\n%d\n%s\n%s\n%s\n%d\n%s\n",keyTab,
this->ID,
this->Age,
this->Pet,
this->Name,
this->Illness,
this->price,
this->notes);
}
void animalRecord::readFile(FILE *CUR, int toDo)
{
animalRecord buf=animalRecord();
int eofflag=0, l, read=0;
char cbuf, key=0;
buf.isSet=0;
do
{
if(feof(CUR))
{
eofflag=1;
break;
}
fscanf(CUR,"%c",&key);
}
while(key!=keyTab);
if(eofflag)
{
if(!read)
{
buf.errorcode=1;
*this = buf;
return;
}
}
//Считування запису--------------------------------------------------------------
fscanf(CUR,"\n%d\n",&buf.ID);
fscanf(CUR,"%d\n",&buf.Age);
for(l=0, fscanf(CUR,"%c",&cbuf);cbuf!='\n';l++)
{buf.Pet[l]=cbuf;
fscanf(CUR,"%c",&cbuf);}
buf.Pet[l]='\0';
for(l=0, fscanf(CUR,"%c",&cbuf);cbuf!='\n';l++)
{buf.Name[l]=cbuf;
fscanf(CUR,"%c",&cbuf);}
buf.Name[l]='\0';
for(l=0, fscanf(CUR,"%c",&cbuf);cbuf!='\n';l++)
{buf.Illness[l]=cbuf;
fscanf(CUR,"%c",&cbuf);}
buf.Illness[l]='\0';
fscanf(CUR,"%d\n",&buf.price);
for(l=0, fscanf(CUR,"%c",&cbuf);cbuf!='\n';l++)
{buf.notes[l]=cbuf;
fscanf(CUR,"%c",&cbuf);}
buf.notes[l]='\0';
if (toDo)
fscanf(CUR,"%d\n",&buf.toDo);
buf.isSet=1;
*this = buf;}
void animalRecord::goToKey(FILE *CUR)
{int i=0,a;float ad;
char key;
if((ftell(CUR))>0)
fseek(CUR,-1,SEEK_CUR);
else{return;}
do
{ad = ftell(CUR);
fscanf(CUR,"%c",&key);
fseek(CUR,ad,SEEK_SET);
if(key=='\n')
a=-2;
else
a=-1;
fseek(CUR,a,SEEK_CUR);
}while(key!=keyTab);
fseek(CUR,1,SEEK_CUR);}
//------------------------------------------------------------------------------
int reccmp(char str1[47], char str2[47], int count);
void New();
void Open();
char* SetStr(int);
animalRecord Set (animalRecord set = animalRecord () );
void Insert(animalRecord sav=animalRecord(),char* mainPath=::mainPath);
void Delete(int ID=-1);
void Modify ();
void Find ();
void Print ();
void GroupWork();
int main()
{textmode(64);
clrscr();
do
{
cout<<"\n1. Create new DataBase"<<
"\n2. Open the DB"<<
...